<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        function getPromise(){
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    if(parseInt(Math.random() * 2) == 0){
                        resolve();
                    }else{
                        reject();
                    }
                    
                },1000);
            })
       
        }
        // let promise = getPromise();
        // promise.then(function(){
        //     console.log("1");
        // })
        // promise.catch(function(){
        //     console.log("1 error");
        // });
        
        // getPromise().then(function(){
        //     console.log("1");
        //     return getPromise();
        // },function(){
        //     console.log("1 error");
        //     return getPromise();
        // }).then(function(){
        //     console.log("2");
        // },function(){
        //     console.log("2 error");
        // });

        obj = {
            name:"zhangsan",
            age:20,
            gender:"男",
            [Symbol.iterator]:function(){
                // for(let k in this){
                //     return {value:this[k],done:false}
                // }
                // return {done:true}
                let i = 0;
                let keys = Object.keys(this);
                console.log(keys.length);
                return {
                    next(){
                        console.log("i:",i);
                        return {
                            value:keys[i++],
                            done:i > keys.length
                        }
                    }
                }

            }
        }
        let map = new Map();
        console.log(map.entries);

        let ary = [100,200,300,400]
        for(k in ary){
            console.log(k);
        }
        let it = obj[Symbol.iterator]();
        // let it = map.entries();
        // map.set("name","张三")
        // console.log(it);
        // while(true){
        //     let obj = it.next();
        //     console.log(obj);
        //     if(obj.done){
        //         break;
        //     }
            
        // }

        function *say(){
            yield console.log("hello");
            yield "什么"
        }

        // let delay = function*(){
        //     yield getPromise();
        //     yield getPromise();
        //     yield getPromise();
        //     yield getPromise();
        // }
        // let d = delay();
        // d.next().value.then(function(){
        //     console.log("1");
        //     return d.next().value
        // },function(){
        //     console.log("1 err");
        //     return d.next().value
        // }).then(function(){
        //     console.log("2");
        // },function(){
        //     console.log("2 err");
        // });

        async function delay1(){
            try{
                await getPromise();
                console.log(1);
            }catch(e){
                console.log("1 err");
            }
            try{
                await getPromise();
                console.log(2);
            }catch(e){
                console.log("2 err");
            }
            try{
                await getPromise();
                console.log(3);
            }catch(e){
                console.log("3 err");
            }
           
        }
        delay1();

    </script>
</body>
</html>